<?php
/**
 * Markdown 预览器类
 * 用于预览和渲染 Markdown 文件
 */
class MarkdownPreviewer {
    
    /**
     * 检查文件是否为 Markdown 文件
     * @param string $filename 文件名
     * @return bool
     */
    public static function isMarkdownFile($filename) {
        $extension = pathinfo($filename, PATHINFO_EXTENSION);
        return in_array(strtolower($extension), ['md', 'markdown']);
    }
    
    /**
     * 渲染 Markdown 文件为 HTML
     * @param string $filePath 文件路径
     * @return string HTML 内容
     */
    public static function renderMarkdown($filePath) {
        if (!file_exists($filePath)) {
            return "<div class='error'>文件不存在: $filePath</div>";
        }
        
        $content = file_get_contents($filePath);
        return self::convertMarkdownToHtml($content);
    }
    
    /**
     * 将 Markdown 文本转换为 HTML
     * @param string $markdown Markdown 文本
     * @return string HTML 内容
     */
    public static function convertMarkdownToHtml($markdown) {
        // 简单的 Markdown 解析器
        $html = $markdown;
        
        // 标题
        $html = preg_replace('/^# (.*)$/m', '<h1>$1</h1>', $html);
        $html = preg_replace('/^## (.*)$/m', '<h2>$1</h2>', $html);
        $html = preg_replace('/^### (.*)$/m', '<h3>$1</h3>', $html);
        $html = preg_replace('/^#### (.*)$/m', '<h4>$1</h4>', $html);
        
        // 粗体
        $html = preg_replace('/\*\*(.*?)\*\*/', '<strong>$1</strong>', $html);
        $html = preg_replace('/__(.*?)__/', '<strong>$1</strong>', $html);
        
        // 斜体
        $html = preg_replace('/\*(.*?)\*/', '<em>$1</em>', $html);
        $html = preg_replace('/_(.*?)_/', '<em>$1</em>', $html);
        
        // 代码块
        $html = preg_replace('/```(.*?)```/s', '<pre><code>$1</code></pre>', $html);
        $html = preg_replace('/`(.*?)`/', '<code>$1</code>', $html);
        
        // 链接
        $html = preg_replace('/\[(.*?)\]\((.*?)\)/', '<a href="$2">$1</a>', $html);
        
        // 列表
        $html = preg_replace('/^- (.*)$/m', '<li>$1</li>', $html);
        $html = preg_replace('/(<li>.*<\/li>)/s', '<ul>$1</ul>', $html);
        
        // 段落
        $html = preg_replace('/(^|\n)([^<\n].*)(\n|$)/m', '<p>$2</p>', $html);
        
        return $html;
    }
    
    /**
     * 生成 Markdown 预览页面
     * @param string $filePath 文件路径
     * @param string $fileName 文件名
     * @return string 完整的 HTML 页面
     */
    public static function generatePreviewPage($filePath, $fileName) {
        $content = self::renderMarkdown($filePath);
        
        return "
        <!DOCTYPE html>
        <html lang='zh-CN'>
        <head>
            <meta charset='UTF-8'>
            <meta name='viewport' content='width=device-width, initial-scale=1.0'>
            <title>Markdown 预览: $fileName</title>
            <style>
                body {
                    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
                    line-height: 1.6;
                    margin: 0;
                    padding: 20px;
                    background-color: #f5f5f5;
                }
                .preview-container {
               
                    margin: 0 auto;
                    background: white;
                    padding: 30px;
                    border-radius: 8px;
                    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
                }
                .header {
                    border-bottom: 2px solid #007cba;
                    padding-bottom: 15px;
                    margin-bottom: 25px;
                }
                .header h1 {
                    color: #007cba;
                    margin: 0;
                }
                .back-link {
                    display: inline-block;
                    margin-bottom: 15px;
                    color: #666;
                    text-decoration: none;
                }
                .back-link:hover {
                    color: #007cba;
                }
                h1, h2, h3, h4 {
                    color: #333;
                    margin-top: 1.5em;
                    margin-bottom: 0.5em;
                }
                h1 { font-size: 2em; }
                h2 { font-size: 1.5em; }
                h3 { font-size: 1.25em; }
                h4 { font-size: 1.1em; }
                p {
                    margin: 1em 0;
                    color: #444;
                }
                code {
                    background: #f4f4f4;
                    padding: 2px 6px;
                    border-radius: 3px;
                    font-family: 'Courier New', monospace;
                }
                pre {
                    background: #f8f8f8;
                    padding: 15px;
                    border-radius: 5px;
                    overflow-x: auto;
                    border-left: 4px solid #007cba;
                }
                pre code {
                    background: none;
                    padding: 0;
                }
                ul {
                    padding-left: 20px;
                }
                li {
                    margin: 5px 0;
                }
                a {
                    color: #007cba;
                    text-decoration: none;
                }
                a:hover {
                    text-decoration: underline;
                }
                .error {
                    background: #ffe6e6;
                    color: #d63031;
                    padding: 15px;
                    border-radius: 5px;
                    border-left: 4px solid #d63031;
                }
            </style>
        </head>
        <body>
            <div class='preview-container'>
                <div class='header'>
                    <a href='./' class='back-link'>← 返回文件列表</a>
                    <h1>📄 $fileName</h1>
                </div>
                <div class='markdown-content'>
                    $content
                </div>
            </div>
        </body>
        </html>
        ";
    }
}
?>